{
var commands = surface.drawQueue;
surface.queue = [];
- var context = surface.context;
+ var context = surface.canvas.getContext("2d");
+ context.globalCompositeOperation = "source-over";
var i = 0;
for (i = 0; i < commands.length; i++) {
var cmd = commands[i];
oldCanvas.parentNode.removeChild(oldCanvas);
surface.canvas = canvas;
+ if (surface.toplevelElement == oldCanvas)
+ surface.toplevelElement = canvas;
surface.document = doc;
-
- var context = canvas.getContext("2d");
- context.globalCompositeOperation = "source-over";
- surface.context = context;
}
}
surface.document = document;
surface.transientToplevel = null;
surface.frame = null;
- stackingOrder.push(surface);
var canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
canvas.surface = surface;
surface.canvas = canvas;
+ var toplevelElement;
if (useToplevelWindows || isTemp) {
- canvas.style["position"] = "absolute";
- canvas.style["left"] = "0px";
- canvas.style["top"] = "0px";
- canvas.style["display"] = "none";
+ toplevelElement = canvas;
document.body.appendChild(canvas);
} else {
var frame = document.createElement("div");
frame.frameFor = surface;
- frame.style["position"] = "absolute";
- frame.style["left"] = "0px";
- frame.style["top"] = "0px";
- frame.style["display"] = "inline";
- // We hide the frame with visibility rather than display none
- // so getFrameOffset still works with hidden windows
- frame.style["visibility"] = "hidden";
frame.className = "frame-window";
+ surface.frame = frame;
var button = document.createElement("center");
var X = document.createTextNode("X");
contents.className = "frame-contents";
frame.appendChild(contents);
- document.body.appendChild(frame);
- contents.appendChild(canvas);
canvas.style["display"] = "block";
+ contents.appendChild(canvas);
- surface.frame = frame;
+ toplevelElement = frame;
+ document.body.appendChild(frame);
surface.x = 100 + positionIndex * 10;
surface.y = 100 + positionIndex * 10;
sendInput ("w", [surface.id, surface.x, surface.y, surface.width, surface.height]);
}
- var context = canvas.getContext("2d");
- context.globalCompositeOperation = "source-over";
- surface.context = context;
+ surface.toplevelElement = toplevelElement;
+ toplevelElement.style["position"] = "absolute";
+ /* This positioning isn't strictly right for apps in another topwindow,
+ * but that will be fixed up when showing. */
+ toplevelElement.style["left"] = surface.x + "px";
+ toplevelElement.style["top"] = surface.y + "px";
+ toplevelElement.style["display"] = "inline";
+
+ /* We hide the frame with visibility rather than display none
+ * so getFrameOffset still works with hidden windows. */
+ toplevelElement.style["visibility"] = "hidden";
surfaces[id] = surface;
+ stackingOrder.push(surface);
}
function cmdShowSurface(id)
return;
surface.visible = true;
- var element = surface.canvas;
var xOffset = surface.x;
var yOffset = surface.y;
}
ensureSurfaceInDocument(surface, doc);
- element = surface.canvas;
} else {
if (surface.frame) {
- element = surface.frame;
var offset = getFrameOffset(surface);
xOffset -= offset.x;
yOffset -= offset.y;
}
}
- element.style["position"] = "absolute";
- element.style["left"] = xOffset + "px";
- element.style["top"] = yOffset + "px";
- element.style["display"] = "inline";
- if (surface.frame)
- surface.frame.style["visibility"] = "visible";
+ surface.toplevelElement.style["left"] = xOffset + "px";
+ surface.toplevelElement.style["top"] = yOffset + "px";
+ surface.toplevelElement.style["visibility"] = "visible";
restackWindows();
}
return;
surface.visible = false;
- var element = surface.canvas;
- if (surface.frame)
- element = surface.frame;
+ var element = surface.toplevelElement;
- if (surface.frame)
- surface.frame.style["visibility"] = "hidden";
- else
- element.style["display"] = "none";
+ element.style["visibility"] = "hidden";
// Import the canvas into the main document
ensureSurfaceInDocument(surface, document);
}
function restackWindows() {
- if (useToplevelWindows)
- return;
-
for (var i = 0; i < stackingOrder.length; i++) {
var surface = stackingOrder[i];
- if (surface.frame)
- surface.frame.style.zIndex = i;
- else
- surface.canvas.style.zIndex = i;
+ surface.toplevelElement.style.zIndex = i;
}
}
var ws = new WebSocket(loc, "broadway");
ws.onopen = function() {
inputSocket = ws;
-
var w, h;
if (useToplevelWindows) {
w = window.screen.width;
} else {
w = window.innerWidth;
h = window.innerHeight;
- window.onresize = function(ev) {
+ window.onresize = function(ev) {
var w, h;
w = window.innerWidth;
h = window.innerHeight;